#!/usr/bin/python3
# -*- coding: utf-8; tab-width: 4; indent-tabs-mode: t -*-


class TemplatePlugin:

    def get_selector_lv01(self):
        pass

    def get_selector_lv02(self):
        pass

    def get_selector_lv99(self):
        pass


"""
  level 1 selector selects:
  1. what available level 1 connection to enable.
"""
class TemplateSelectorLv1:

    def dispose(self):
        pass

    def set_slaves(self, connection_manager):
        pass

    def on_obconn_available(self, plugin_id, connection_id, connection_data):
        pass

    def on_obconn_unavailable(self, connection_id, reason):
        pass

    def on_obconn_activated(self, connection_id, connection_livedata):
        pass

    def on_obconn_deactivated(self, connection_id, reason):
        pass



"""
  level 2 selector selects:
  1. what available level 2 connection to enable.
  2. level 2 routes (including default route)
  3. level 2 nameserver
"""
class TemplateSelectorLv2:

    def dispose(self):
        pass

    def set_slaves(self, connection_manager, route_table, name_server):
        pass

    def on_lv1_obconn_activated(self, connection_id, connection_livedata):
        pass

    def on_lv1_obconn_deactivated(self, connection_id, reason):
        pass

    def on_obconn_available(self, plugin_id, connection_id, connection_data):
        pass

    def on_obconn_unavailable(self, connection_id, reason):
        pass

    def on_obconn_activated(self, connection_id, connection_livedata):
        pass

    def on_obconn_deactivated(self, connection_id, reason):
        pass


"""
  level 99 selector selects:
  1. level 99 routes (including default route)
  2. level 99 nameserver
  3. ntp server
  4. wins server
  5. http-proxy
  6. socks-proxy

  no need to select privnet, they must be conflict free.
  no need to select subnet, they must be conflict free.
"""
class TemplateSelectorLv99:

    def dispose(self):
        pass

    def set_slaves(self, route_table, name_server, ntp_server_agent_list, wins_server_agent_list):
        pass

    def on_lv1_obconn_activated(self, connection_id, connection_livedata):
        pass

    def on_lv1_obconn_deactivated(self, connection_id, reason):
        pass

    def on_lv2_obconn_activated(self, connection_id, connection_livedata):
        pass

    def on_lv2_obconn_deactivated(self, connection_id, reason):
        pass




